///\file

#include "data_base.h"
#include "server.h"

/**
* \brief Inserção (RPC).
*
* Implementação da inserção que satisfaz o protótipo requerido pelo RPC.
* \param reg Registro com os dados do funcionário que será inserido.
* \param req Uso do RPC.
* \return Valor não válido. 
*/
void *insert_1_svc( Registry *reg, struct svc_req *req ) {
	//Variável utilizada para não passar NULL ao RPC.
	static char notnull = 0;
	server_insert( reg );
	return &notnull;
}

/**
* \brief Remoção (RPC).
*
* Implementação da remoção que satisfaz o protótipo requerido pelo RPC.
* \param reg Registro com os dados do funcionário que será removido.
* \param req Uso do RPC.
* \return Valor não válido. 
*/
void *remove_1_svc( Registry *reg, struct svc_req *req ) {
	//Variável utilizada para não passar NULL ao RPC.
	static char notnull = 0;
	server_remove( reg );
	return &notnull;
}

/**
* \brief Consulta (RPC).
*
* Implementação da consulta que satisfaz o protótipo requerido pelo RPC.
* \param reg Registro com os dados a serem buscados.
* \param req Uso do RPC.
* \return Lista com os dados da resposta do banco de dados. 
*/
RegistryList *search_1_svc( Registry *reg, struct svc_req *req ) {
	static RegistryList list = {{0,NULL}};
	Registry *result;
	unsigned int loop;
	
	//Libera memória da consulta anterior
	if(list.list.list_val != NULL){
		for(loop = 0; loop < list.list.list_len; loop++){
			free(list.list.list_val[loop].nome);
			free(list.list.list_val[loop].CPF);
			free(list.list.list_val[loop].RG);
			free(list.list.list_val[loop].cargo);
		}
		free(list.list.list_val);
	}

	size_t size = server_search( *reg, &result );
	list.list.list_len = size;
	list.list.list_val = result;
	return &list;
}
